package test1;

import mytask.Task;
import mythread.MyThread1;
import mythread.MyThread2;

import commonutils.CommonUtils;

public class Run {

	public static void main(String[] args) {
		Task task = new Task();

		MyThread1 thread1 = new MyThread1(task);
		thread1.start();

		MyThread2 thread2 = new MyThread2(task);
		thread2.start();

		try {
			Thread.sleep(10000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}

		long beginTime = CommonUtils.beginTime1;
		if (CommonUtils.beginTime2 < CommonUtils.beginTime1) {
			beginTime = CommonUtils.beginTime2;
		}

		long endTime = CommonUtils.endTime1;
		if (CommonUtils.endTime2 > CommonUtils.endTime1) {
			endTime = CommonUtils.endTime2;
		}

		System.out.println("耗时" + ((endTime - beginTime) / 1000));
	}
	/**
	 * 输出结果：
	 * begin task
	   begin task
	   长时间处理任务后从远程返回的值1 threadName=Thread-1
	   长时间处理任务后从远程返回的值2 threadName=Thread-0
	   end task
	   长时间处理任务后从远程返回的值1 threadName=Thread-0
	   长时间处理任务后从远程返回的值2 threadName=Thread-0
	   end task
	   耗时3
	 *
	 * 由上述实验可以得知，当一个线程访问object的一个Synchronized同步代码块时，
	 * 另一个线程仍然可以访问该object对象中的非synchronized(this)同步代码块。
	 *
	 * 实验进行到这里，虽然时间缩短，运行效率加快，但同步synchronized代码块整的是同步的吗？
	 * 真的持有当前调用对象的锁吗？答案为是，但必须用代码的方式来进行验证。
	 *
	 *
	 */
}
